<?php
/**
 * Googlecode解析クラスモジュール
 */
require_once dirname(__FILE__) . '/../object.php';
require_once dirname(__FILE__) . '/../simple_html_dom.php';
/**
 * Googlecode解析クラス
 */
class Google_Code extends object
{
	/*** GooglecodeプロジェクトホームURLリスト */
	protected $プロジェクトURLリスト = array();
	/**
	 * コンストラクタ
	 */
	public function __construct()
	{
		/*** 改変ログURLリスト設定 */
		$this->プロジェクトURLリスト = array(
			'hariushi-lib' => 'https://code.google.com/p/hariushi-lib',
			'少年サッカークラブマネージャ'=>'https://code.google.com/p/junior-succer-club-manager',
			'wikiriad' => 'https://code.google.com/p/wikiriad',
			'mantis' => 'https://code.google.com/p/mantiskai',
			'gcmemo' => 'https://code.google.com/p/gcmemo',
			'taskcal'=>'https://code.google.com/p/task-shoot-calendar',
		);
	}
	/**
	 * Googlecodeの変更ログ画面（複数プロジェクト）から変更リストを作成す
	 */
	public function 変更ログリストを作成する($チケットID='')
	{
		$変更ログリスト = array();
		/*** 複数プロジェクト対応 */
		foreach ($this->プロジェクトURLリスト as $Key=>$ログURL	) {
			$プロジェクト単位のログリスト = array();
			$ログHTML = $this->プロジェクトの変更ログにアクセスする($ログURL . '/source/list?num=100');
			$プロジェクト単位のログリスト = $this->変更ログHTMLをリストに変換する($ログHTML, $ログURL);
			$変更ログリスト = array_merge($変更ログリスト, $プロジェクト単位のログリスト);
		}
		/*** チケットID判定 */
		if ($チケットID != '') {
			$変更ログリスト = $this->変更ログリストをチケットIDでマスクする($チケットID, $変更ログリスト);
		}
		return $変更ログリスト;
	}
	/**
	 * 変更ログリストをチケットIDでマスクする
	 * @param unknown $チケットID
	 * コメント内チケットIDフォーマット:"#{チケットID}"
	 */
	protected function 変更ログリストをチケットIDでマスクする($チケットID, $変更ログリスト)
	{
		$result = array();
		/*** 全件走査 */
		foreach ($変更ログリスト as $変更ログ) {
			$変更ログコメント = $変更ログ['text'];
			$コメント内チケットID = substr($変更ログコメント, 1, strlen($チケットID));
			/*** チケットID判定 */
			if ($コメント内チケットID == $チケットID) {
				$result[] = $変更ログ;
			}
		}
		return $result;
	}
	/**
	 * GooleコードSVNログにアクセスする
	 * @param unknown $url
	 * @return mixed
	 */
	public function プロジェクトの変更ログにアクセスする($url)
	{
		$ch = curl_init ( $url );
		curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		$c = curl_exec ( $ch );
		curl_close($ch);
		return $c;
	}
	public function 変更ログHTMLをリストに変換する($htmlCode, $ログURL)
	{
		$ブレイク判定HREF = '';
		$arrResult = array();
		$html = str_get_html($htmlCode);
		$arrA = $html->find('a');
		/*** アンカータグ全件走査*/
		foreach ($arrA as $anc) {
			$href =$anc->attr['href'];
			/*** 変更ログアンカー判定 */
			if (strpos($href, 'detail?r=') !== FALSE) {
				/*** 行内に複数の同一変更ログアンカーが存在する判定*/
				if ($ブレイク判定HREF != $href) {
					$ブレイク判定HREF = $href;
					$列番号 = 0;
				}
				/*** 二つ目のアンカーがコメント */
				if ($列番号 == 1) {
					$text = $anc->plaintext;
					$rev = str_replace('detail?r=', '', $href);
					$arrResult[] = array('rev'=>$rev,  'href' => $ログURL .  '/source/' . $href, 'text'=>$text);
				}
				$列番号 ++;
			}
		}
		return $arrResult;
	}

}

/*ユニットテストブロック V2*/
if (class_exists('ユニットテストケース')) {
	/**
	 * テストケース
	 */
	class ユニークな名前_test extends ユニットテストケース
	{
		protected $テストするクラス名='TestClassName';
		//ここがテストケースの記載場所
		function test_変更ログリストを作成する()
		{
			$obj = new Google_Code();
			$ret = $obj->変更ログリストを作成する(265);
			print_r($ret);
		}
	}
}